---
displayed_sidebar: "Chinese"
---

# 表类型概览

建表时，您需要指定表类型 (Table Type)，这样数据导入至表时，StarRocks 会按照排序键对数据进行排序、处理和存储。本文介绍 StarRocks 支持的各种表类型，满足您在不同业务场景下的需求。

## 基本概念

### 表类型

StarRocks 支持四种表类型，分别是明细表 (Duplicate key table)、聚合表 (Aggregate table)、更新表 (Unique Key table) 和主键表 ( Primary Key table)。这四种表类型能够支持多种数据分析场景，例如日志分析、数据汇总分析、实时分析等。

### 排序键

数据导入至使用某个类型的表，会按照建表时指定的一列或多列排序后存储，这部分用于排序的列就称为排序键。排序键通常为查询时过滤条件频繁使用的一个或者多个列，用以加速查询。
明细表中，数据按照排序键 `DUPLICATE KEY` 排序，并且排序键不需要满足唯一性约束。
聚合表中，数据按照排序键 `AGGREGATE KEY` 聚合后排序，并且排序键需要满足唯一性约束。
更新表中，数据按照排序键 `UNIQUE KEY` REPLACE 后排序，并且排序键需要满足唯一性约束。
主键表支持分别定义主键和排序键，主键 `PRIMARY KEY` 需要满足唯一性和非空约束，主键相同的数据进行 REPLACE。排序键是用于排序，由 `ORDER BY` 指定 。
> **说明**
>
> - 3.0 版本之前，主键表不支持分别定义主键和排序键。
> - 排序键的更多说明，请参见[排序键和前缀索引](../indexes/Prefix_index_sort_key.md)。

## 注意事项

- 建表后，表类型不支持修改（比如不能将已有的明细表修改为主键表）。如果需要修改表类型，请重新建表。

- 在建表语句中，排序键必须定义在其他列之前。

- 在创建表时，您可以将一个或多个列定义为排序键。排序键在建表语句中的出现次序，为数据存储时多重排序的次序。

- 不支持排序键的数据类型为 BITMAP、HLL。

- 前缀索引的长度限制为 36 字节。如果排序键中全部列的值的长度加起来超过 36 字节，则前缀索引仅会保存限制范围内排序键的若干前缀列。

- 如果导入的数据存在重复的主键，则数据导入至不同类型的表时，存储在 StarRocks 时，则会按照如下方式进行处理：
  - 明细表：表中会存在主键重复的数据行，并且与导入的数据是完全对应的。您可以召回所导入的全部历史数据。
  - 聚合表：表中不存在主键重复的数据行，主键满足唯一性约束。导入的数据中主键重复的数据行聚合为一行，即具有相同主键的指标列，会通过聚合函数进行聚合。您只能召回导入的全部历史数据的聚合结果，但是无法召回历史明细数据。
  - 主键表和更新表：表中不存在主键重复的数据行，主键满足唯一性约束。最新导入的数据行，替换掉其他主键重复的数据行。这两种类型的表可以视为聚合表的特殊情况，相当于在聚合表中，为表的指标列指定聚合函数为 REPLACE，REPLACE 函数返回主键相同的一组数据中的最新数据。
